package com.skt.domain.PO;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 已上传文件持久化对象（PO）
 * <p>
 * 对应数据库表：file_record
 * 用于统一管理用户上传的文件元数据（如服装封面图、详情图、用户头像等）。
 * <p>
 * 设计原则：
 * - 不存储公开 URL（由服务层动态生成）
 * - 支持逻辑删除（status = 2 表示已删除）
 * - 通过 businessType + businessId 关联业务实体
 */
@Data
@TableName("file_record")
public class UploadedFile {

    /**
     * 文件记录ID（主键，自增）
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 上传者用户ID（关联 user.id）
     */
    private Long userId;

    /**
     * 原始文件名（含扩展名，如 "唐代仕女服.png"）
     */
    private String originalFilename;

    /**
     * 内部存储路径（如 "oss://stagewardrobe/costumes/2025/10/14/abc123.png"）
     * 用于后端定位真实文件，不对外暴露
     */
    private String storagePath;

    /**
     * 存储类型：local / oss / cos
     */
    private String storageType;

    /**
     * 文件大小（单位：字节）
     */
    private Long fileSize;

    /**
     * MIME 类型（如 "image/jpeg", "image/png"）
     */
    private String mimeType;

    /**
     * 文件内容的 MD5 哈希值（32位小写）
     * 用于文件去重和完整性校验
     */
    private String md5Hash;

    /**
     * 业务类型（枚举字符串）：
     * - costume_cover：服装封面图
     * - costume_detail：服装详情图
     * - user_avatar：用户头像
     * - order_proof：订单凭证
     */
    private String businessType;

    /**
     * 关联的业务实体ID（如 costume.id, user.id）
     */
    private Long businessId;

    /**
     * 文件状态（逻辑删除）：
     * 1 - 有效（默认）
     * 2 - 已删除
     */
    @TableLogic(value = "1", delval = "2")
    private Byte status;

    /**
     * 创建时间（自动填充）
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    /**
     * 最后更新时间（自动填充）
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
}